Consumer electronic devices, such as cellular telephones, digital music players, thumb drives and other handheld devices, execute increasingly complicated algorithms, such as algorithms for decoding compressed digital audio and video data and user interface algorithms. As the complexity of these algorithms increases, so does the memory usage for storing such algorithms.
Increasingly, manufacturers are turning to non-volatile memory devices, such as flash memory devices including NAND flash and NOR flash memory devices. Typically, non-volatile memory devices store data in logical units, such as memory pages and memory blocks. A set of memory pages form a memory block. Often, data is written to a page and may be read from locations within that page. Typically, a block is the smallest amount of data that may be erased. In a typical flash device, each page has a data area and a redundant memory area, sometimes referred to as an overhead area or metadata area. The redundant memory area of the page stores information about the page, information about data within the page, and data associated with error correction procedures for the page.
Accessing and storing data on non-volatile memory devices, such as flash memory, utilizes virtual addressing. Non-volatile memory devices tend to wear with use and, as such, sectors within a solid-state memory device may lose the capacity to store error free data. To reduce the problem of solid-state memory wear, microcontrollers generally balance usage between sectors of the memory. For example, when data is provided to a flash memory device it may be stored in a first sector and when the data is updated the microcontroller may store the data in a second sector, reducing wear on the first sector. As a result, the physical location of a block of data may change. To facilitate this balancing and to address changing physical addresses, microcontrollers generally create a table that is used to convert location based addresses used by computational systems to the virtual addresses used within the flash memory devices. In this manner, a system may address a set of data using the same location based address while a microcontroller may store that information in changing sectors of the flash memory or at different addresses within the flash memory depending upon the balancing protocols. When a sector turns bad within the flash memory device, the microcontroller may create a mapping of bad data sectors to prevent storage of data in such bad data sectors.
The cataloging of bad sectors and creation of sector maps is typically performed by reading a data sector and checking for particular code values in the system data. Generally, an ECC associated with all of the data of a data sector is included in a data sector for use in correcting and checking for noise in the data. For example, an ECC is calculated based on data when the data is stored and the ECC is stored with the data. When the data is accessed, a new ECC is calculated from the data and compared to the ECC stored with the data. If there is a difference between the new ECC and the stored ECC, the data is likely corrupted and the sector may be bad. In many examples, ECCs may be used to correct the data before transmission to subsequent memory systems or processors.
However, the process of reading data in a non-volatile memory and performing error correction on corrupted data is a time consuming process. As such, there is a need for an improved system and method for reading non-volatile memory.